1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.escape;
18
19 import com.google.common.annotations.GwtCompatible;
20 import com.google.common.collect.ImmutableMap;
21 import com.google.common.escape.testing.EscaperAsserts;
22
23 import junit.framework.TestCase;
24
25 import java.io.IOException;
26 import java.util.Map;
27
28
29
30
31 @GwtCompatible
32 public class ArrayBasedCharEscaperTest extends TestCase {
33 private static final Map<Character, String> NO_REPLACEMENTS =
34 ImmutableMap.of();
35 private static final Map<Character, String> SIMPLE_REPLACEMENTS =
36 ImmutableMap.of(
37 '\n', "<newline>",
38 '\t', "<tab>",
39 '&', "<and>");
40
41 public void testSafeRange() throws IOException {
42
43 CharEscaper wrappingEscaper =
44 new ArrayBasedCharEscaper(NO_REPLACEMENTS, 'A', 'Z') {
45 @Override protected char[] escapeUnsafe(char c) {
46 return ("{" + c + "}").toCharArray();
47 }
48 };
49 EscaperAsserts.assertBasic(wrappingEscaper);
50
51 assertEquals("{[}FOO{@}BAR{]}", wrappingEscaper.escape("[FOO@BAR]"));
52 }
53
54 public void testSafeRange_maxLessThanMin() throws IOException {
55
56 CharEscaper wrappingEscaper =
57 new ArrayBasedCharEscaper(NO_REPLACEMENTS, 'Z', 'A') {
58 @Override protected char[] escapeUnsafe(char c) {
59 return ("{" + c + "}").toCharArray();
60 }
61 };
62 EscaperAsserts.assertBasic(wrappingEscaper);
63
64 assertEquals("{[}{F}{O}{O}{]}", wrappingEscaper.escape("[FOO]"));
65 }
66
67 public void testDeleteUnsafeChars() throws IOException {
68 CharEscaper deletingEscaper =
69 new ArrayBasedCharEscaper(NO_REPLACEMENTS, ' ', '~') {
70 private final char[] noChars = new char[0];
71 @Override protected char[] escapeUnsafe(char c) {
72 return noChars;
73 }
74 };
75 EscaperAsserts.assertBasic(deletingEscaper);
76 assertEquals("Everything outside the printable ASCII range is deleted.",
77 deletingEscaper.escape("\tEverything\0 outside the\uD800\uDC00 " +
78 "printable ASCII \uFFFFrange is \u007Fdeleted.\n"));
79 }
80
81 public void testReplacementPriority() throws IOException {
82 CharEscaper replacingEscaper =
83 new ArrayBasedCharEscaper(SIMPLE_REPLACEMENTS, ' ', '~') {
84 private final char[] unknown = new char[] { '?' };
85 @Override protected char[] escapeUnsafe(char c) {
86 return unknown;
87 }
88 };
89 EscaperAsserts.assertBasic(replacingEscaper);
90
91
92
93 assertEquals("<tab>Fish <and>? Chips?<newline>",
94 replacingEscaper.escape("\tFish &\0 Chips\r\n"));
95 }
96 }